(* A XOR B == (NOT(A AND B)) AND (NOT(NOT A AND NOT B)) *)
(* a xor b == ( not( (a>0) and (b>0) ) ) and ( not ( (not(a>0)) and (not(b>0)) ) )     *)
(* c xor d == ( not( (c>0) and (d>0) ) ) and ( not ( (not(c>0)) and (not(d>0)) ) )     *)
ifxor(a,b,c,d)
	var x = 1;
	if ( not( (a>0) and (b>0) ) ) and ( not ( (not(a>0)) and (not(b>0)) ) ) goto xtrue;
	x = 0;
	xtrue:
	var y = 1;
	if ( not( (c>0) and (d>0) ) ) and ( not ( (not(c>0)) and (not(d>0)) ) ) goto ytrue;
	y = 0;
	ytrue:
	if ( not( (x>0) and (y>0) ) ) and ( not ( (not(x>0)) and (not(y>0)) ) ) goto true;
	goto false;
	return -1;
	false: return 0;
	true: return 1;
end;
